home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Internet
/
Collection of Internet.iso
/
faq
/
comp
/
object_f
/
part2
< prev
next >
Wrap
Text File
|
1993-12-14
|
60KB
|
1,325 lines
Newsgroups: comp.object,comp.answers,news.answers
Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!nic.hookup.net!europa.eng.gtefsd.com!howland.reston.ans.net!vixen.cso.uiuc.edu!uchinews!news
From: Bob Hathaway <rjh@geodesic.com>
Subject: Comp.Object FAQ Version 1.0.5 (12-13) Part 2/8
Message-ID: <1993Dec14.044309.18084@midway.uchicago.edu>
Followup-To: comp.object
Summary: Frequently Asked Questions (FAQ) List and Available Systems For Object-Oriented Technology
Sender: news@uchinews.uchicago.edu (News System)
Organization: Geodesic Systems
Date: Tue, 14 Dec 1993 04:43:09 GMT
Approved: news-answers-request@MIT.Edu
Lines: 1310
Xref: senator-bedfellow.mit.edu comp.object:13849 comp.answers:2990 news.answers:15748
Archive-name: object-faq/part2
Last-Modified: 12/13/93
Version: 1.0.5
"Poly" means "many" and "morph" means "form". The homograph polymorphism has
many uses in the sciences, all referring to objects that can take on or assume
many different forms. Computer Science refers to Strachey's original
definitions of polymorphism, as divided into two major forms, parametric and
ad-hoc. Cardelli and Wegner followup with another classification scheme,
adding inclusion polymorphism for subtyping and inheritance.
> Strachey's Original Definition [Strachey 67]:
"Parametric polymorphism is obtained when a function works uniformly on a range
of types; these types normally exhibit some common structure. Ad-hoc
polymorphism is obtained when a function works, or appears to work, on several
different types (which may not exhibit a common structure) and may behave in
unrelated ways for each type."
Parametric polymorphism is also referred to as "true" polymorphism, whereas
ad-hoc polymorphism isn't (apparent polymorphism).
> Cardelli and Wegner's Definition [Cardelli 85]:
C+W refine Strachey's definition by adding "inclusion polymorphism" to model
subtypes and subclasses (inheritance). Strachey's parametric polymorphism is
divided into parametric and inclusion polymorphism, which are closely related,
but separated to draw a clear distinction between the two forms, which are then
joined as specializations of the new "Universal" polymorphism.
|-- parametric
|-- universal --|
| |-- inclusion
polymorphism --|
| |-- overloading
|-- ad hoc --|
|-- coercion
Polymorphic Languages: some values and variables may have more than one type.
Polymorphic Functions: functions whose operands (actual parameters) can
have more than one type. [...] If we consider a generic function to be
a value, it has many functional types and is therefore polymorphic.
Polymorphic Types: types whose operations are applicable to operands of more
than one type.
Parametric Polymorphism: a polymorphic function has an implicit or explicit
type parameter which determines the type of the argument for each
application of that function.
Inclusion Polymorphism: an object can be viewed as belonging to many different
classes that need not be disjoint; that is, there may be inclusion of
classes.
The two forms of "Universal Polymorphism", parametric and inclusion are closely
related, but are distinct enough in implementation to justify separate
classifications.
Parametric polymorphism is referred to as generics. Generics can be syntactic,
where each instantiation creates a specialized version of the code allowing
fast running execution, but in a "true polymorphic system", only a single
implementation is used.
On inheritance is subtype polymorphism:
"Subtyping on record types corresponds to the concept of inheritance
(subclass) in languages, especially if records are allowed to have functional
components."
Author's Notes:
Implicit parametric polymorphism can be implemented with type inferencing
schemes [Aho 85]. ML is prototypical in providing this facility.
Inclusion polymorphism is common and is found in languages such as Simula,
Ada-9x, C++, CLOS, Eiffel and etc. (subclass polymorphism). Smalltalk also
uses inclusion polymorphism; its used in declaring classes, and subclass
polymorphism is used in practice but not enforced. For inheritance, inclusion
polymorphism specifies an instance of a subclass can appear wherever an
instance of a superclass is required. For subtyping (subtype polymorphism),
the same applies because all operations required by the supertype are present
in the subtype (subtype is subset of supertype). Cardelli and Wegner view
classes as sets of objects (resulting in subtype objects are a subset of
supertype objects, or an extentional view), as contrasted with a feature based
(intentional) approach (where subtypes are supersets of (contain) supertypes).
MI provides an interesting example here, as it is set intersection with an
extensional view and set union with an intentional view. Details are left as
an exercise for the reader.
Ada generics and C++ templates provide explicit syntactic generics. While
Ada may infer some actual generic parameters (operations) and C++ doesn't
require explicit instantiation of its template functions, formal generic
parameters must still be declared and many bodies are generated.
Inclusion polymorphism can refer to subtyping, or having at least as much or
more than required. Since derived classes can inherit structure and behavior
from base classes, such inheritance is an example of inclusion polymorphism
with respect to representation (subclassing). An example of inclusion
polymorphism with respect to assignment (and initialization, or replacement if
viewed in an almost symbolic way) occurs when object types may be specified and
assignment is based on actual object membership in that type (often of the CLOS
is-a-member-of form in OO). Emerald provides another example of an object-
oriented language using inclusion polymorphism with respect to replacement;
however, inclusion is with respect to subtyping only with abstract types
("bounded quantification" by C+W. C+W's parameters are subtype polymorphic
but lose the inherent type). Any object possessing all required operations is
acceptable and no inheritance relation is required (subtype polymorphism).
They refer to this as "best-fitting" types [Black 86]. The original Trellis/
Owl also had such a facility but with two separate inheritance hierarchies,
although it was abandoned in favor of a single class-based approach for
simplicity. See also section 2.7.
[As inclusion polymorphism covers both subtype and subclass polymorphism,
perhaps IP could be further divided in C+W's above classification.]
> Booch's Definition [Booch 91, p. 517]:
polymorphism A concept in type theory, according to which a name (such as a
variable declaration) may denote objects of many different classes that are
related by some common superclass; thus, any object denoted by this name is
able to respond to some common set of operations in different ways.
Booch also has several sections devoted to polymorphism.
[The author notes Booch's definition above is clearly in the context of
conventional, classical OO and subclass polymorphism.]
> Meyer's Definition [Meyer 88, sect. 10.1.5 Polymorphism]:
"Polymorphism" means the ability to take several forms. In object-oriented
programming, this refers to the ability of an entity to refer at run-time to
instances of various classes. In a typed environment such as Eiffel, this is
constrained by inheritance: ...
[The Author notes Meyer has a following section 10.1.7 on Static Type,
dynamic type, which is relevant, but claims "... there is no way the type
of an object can ever change. Only a reference can be polymorphic: ...".
Meyer is clear between the concept and the Eiffel realization in his
polymorphism definition above, but here neglects the "becomes" facility
as found in several dynamically typed OO languages such as Actors, CLOS,
Self and Smalltalk, which allows an object (and not just a reference) to
change its class.]
> Stroustrup's Definition [Stroustrup 90, p. 209]:
The use of derived classes and virtual functions is often called "object-
oriented programming". Furthermore, the ability to call a variety of
functions using exactly the same interface - as is provided by virtual
functions - is sometimes called "polymorphism".
[The Author notes this is a functional view of polymorphism (as provided in
C++). [Stroustrup 91, p. 136] has an example of polymorphism with void *'s,
but a newer template function is incomparably preferable, as implied in
[Stroustrup 90, ch 14]]
Rumbaugh's Definition [Rumbaugh 91, p. 2]:
"Polymorphism" means that the same operation may behave differently on
different classes.
2.2) What Does Polymorphism Boil Down To In OO Programming Languages?
----------------------------------------------------------------------
In C++, virtual functions provide polymorphism. This is because a polymorphic
object (pointer or reference (or such parameter)) is assignment compatible with
any object of a derived class. Is this polymorphism in itself? Objects
can take on objects of different forms (the derived classes), but of what use
is it? To make any difference, the differing forms must have some effect. In
dynamically typed languages, polymorphic objects are passed messages and will
respond in whatever way the object has defined (usually starting from its most
derived class and working its way up). But for static objects, a virtual
function is invoked. This is the stored method from the derived class that
overrode the virtual method from its base class, providing specialized behavior
for the polymorphic object; and hence, polymorphism. This common pure
statically typed example is, of course, an example of inclusion polymorphism,
subclass polymorphism to be more specific (see section 2.1). Pure statically
typed subtype polymorphism, as provided in Emerald, can be implemented
similarly [Black 86].
2.3) What Is Dynamic Binding?
------------------------------
Dynamic binding has two forms, static and dynamic. Statically-typed dynamic
binding is found in languages such as C++ (virtual functions) and Eiffel
(redefinition). It is not known which function will be called for a virtual
function at run-time because a derived class may override the function, in
which case the overriding function must be called. Statically determining all
possibilities of usage is undecidable. When the complete program is compiled,
all such functions are resolved (statically) for actual objects. Formal object
usage must have a consistent way of accessing these functions, as achieved thru
vtables of function pointers in the actual objects (C++) or equivalent,
providing statically-typed dynamic binding (this is really just defining simple
function pointers with static typechecking in the base class, and filling them
in in the derived class, along with offsets to reset the receiver).
The run-time selection of methods is another case of dynamic binding, meaning
lookup is performed (bound) at run-time (dynamically). This is often desired
and even required in many applications including databases, distributed
programming and user interaction (e.g. GUIs). Examples can be found in
[Garfinkel 93, p80] and [Cox 91, pp 64-67]. To extend Garfinkels example with
multiple-polymorphism, a cut operation in an Edit submenu may pass the cut
operation (along with parameters) to any object on the desktop, each of which
handles the message in its own way (OO). If an (application) object can cut
many kinds of objects such as text and graphical objects, multiple-polymorphism
comes into play, as many overloaded cut methods, one per type of object to be
cut, are available in the receiving object, the particular method being
selected based on the actual type of object being cut (which in the GUI case is
not available until run-time).
Again, various optimizations exist for dynamic lookup to increase efficiency
(such as found in [Agrawal 91] and [Chambers 92]).
Dynamic binding allows new objects and code to be interfaced with or added to
a system without affecting existing code and eliminates switch statements.
This removes the spread of knowledge of specific classes throughout a system,
as each object knows what operation to support. It also allows a reduction in
program complexity by replacing a nested construct (switch statement) with a
simple call. It also allows small packages of behavior, improving coherence
and loose coupling. Another benefit is that code complexity increases not
linearly but exponentially with lines of code, so that packaging code into
methods reduces program complexity considerably, even further that removing
the nested switch statement! [Martin 92] covers some of these issues.
2.4) Is There A Difference Between Being A Member Or Instance Of A Class?
--------------------------------------------------------------------------
Yes (but be careful of context). To use C++ terminology, an object (not
a reference) is defined to be an instance of exactly one class (in classical
OO), called its most derived class. An object not directly contained in any
other is called the complete object [Stroustrup 90]. An object is a member
of several classes, including all of the classes its declared (or most derived)
class inherits from. With static typing and inclusion polymorphism based on
class, if a polymorphic object (or reference) is made to refer to an object,
that object must be a member of the polymorphic object's class.
This also provides a good example of differing definitions among object-
oriented languages, since a member is defined as above in CLOS, but a member of
a class is one of its instance variables in C++.
2.5) What Is The Difference Between Static And Dynamic Typing?
---------------------------------------------------------------
Static typing refers to types declared in a program at compile-time, so no type
information is available on objects at run-time. Dynamic typing uses the
inherent types of polymorphic objects, keeping track of the types of objects at
run-time. Statically typed dynamic binding is a compromise (usually
implemented with tables of function pointers and offsets), and is how
statically-typed OO languages provide polymorphism. Some approaches provide
both static and dynamic typing, sometimes with static typing providing type-
safe programs and dynamic typing providing multiple-polymorphism [Agrawal 91]
[Mugridge 91]. See also section 2.3.
Static typing is more efficient and reliable, but loses power. Typical
restrictions include only allowing a common set of base class functions (or
any common functions for the more general subtyping or parametric polymorphic
cases) to be available on formal objects and a lack of multiple-polymorphism
(see section 1.19), both of which are overcome with dynamic typing.
Many languages provide dynamic typing: Smalltalk, Self, Objective-C, and etc.
A limited dynamic typing scheme, called RTTI (Run Time Type Identification),
is even being considered for the C++ standard. A similar facility to safe
downcasting (historically known as type narrowing), the thrust of RTTI, can
also be found in recent versions of Eiffel.
See section 3.4 for a categorization of common OO languages by type system.
2.6) What Is This I Hear About ML And Functional Programming Languages?
------------------------------------------------------------------------
ML, Metalanguage, is a functional programming language with a strongly typed
polymorphic type system [Wikstrom 87]. Russell (see Appendix E) is a more
recent functional language and Haskell [Hudak 92] provides a more modern and
"pure" example. Section 2.5 discusses why static typing has less power/
flexibility than dynamic typing and the same applies to ML (although see the
appendixes for an experimental dynamic extension to ML, Alcool-90 and [Cardelli
85] for a proper placement of ML's type system). ML doesn't use inheritance
for polymorphism; unlike OO languages, but provides the prototypical example of
parametric polymorphism, so no inheritance is required. This is "true" or
"pure" statically (or strongly) checked parametric polymorphism, by Strachey's
(and Cardelli and Wegner's) definitions.
Smalltalk is an example of a dynamically-typed language which does not check
types during assignment (and hence for parameters) and therefore provides
parametric polymorphism without static constraints (by Strachey's definition).
However, Smalltalk's style uses inclusion polymorphism in practise and
inheritance for subclassing (representation).
2.7) What Is A Separation Between Type And Class (Representation)?
-------------------------------------------------------------------
For a short answer:
Subtype Polymorphism, as opposed to Subclass Polymorphism, is the best answer
in OO. Parametric polymorphism is a related concept where this is also true,
but is of a different flavor (and usually requires object attributes by use.
See also section 2.1).
A type can be considered a set of values and a set of operations on those
values. This can insure type-safe programming. However, the representation of
types (classes in OO) can be separated from the notion of type allowing many
representations per type while still maintaining reasonable type-safety.
In many languages, a type has a single representation insuring all operations
performed on that type are well defined (statically bound) and providing for
efficiency by taking advantage of that representation wherever used. In many
OO languages, subclassing and dynamic binding provides for greater flexibility
by providing object specialization. However, in many OO languages classes are
used for assignment compatibility forcing an assigned object to inherit
(transitively) from any polymorphic object's class (inclusion polymorphism
based on class, or subclass polymorphism). This insures all operations to be
performed on any polymorphic object are satisfied by any replacing objects.
This also insures all types share a common representation, or at least a
common base interface specification.
By separating type from class, or representation (or perhaps separating class
from type, by the aforementioned definition of type), a replacing object must
satisfy the operations or type constraints of a polymorphic object (subtype
polymorphism) but are not required to do to do so by an inheritance relation
(subclass polymorphism), as is typical in most OOPLs. Dropping this
restriction is somewhat less type-safe, because accidental matches of method
signatures can occur, calling for greater care in use. [Black 86] discusses
this issue in Emerald. The same issue arises in parametric polymorphism
(generics/templates), as any method matching a required signature is accepted,
calling for careful matching of actual and formal generic parameters. The
difference between static and dynamic binding in OO and dynamic binding and
subtyping seems similar. A possible loss of semantic integrity/similarity is
contrasted with greater power.
It is possible to specify desired abstract properties of type specifications
with mechanisms similar to Eiffel's pre-, post-, and invariant conditions.
This helps to insure the semantic integrity of replacing objects and their
behavior. [Liskov 93] provides a recent exposition.
Abstract classes ([Stroustrup 91] and [Meyer 88]) in typing provide a facility
similar to subtype polymorphism; however, ACs require type compatible classes
to inherit from them, providing a subclass polymorphism facility, and ACs can
also specify representation. Subtyping is therefore most useful to avoid
spreading knowledge of classes throughout a system, which is a high priority
for loosely coupled modules and in distributed programming [Black 87].
The formal type system found in [Cardelli 85], Emerald/Jade [Black 86] and
[Raj 89], original trellis/Owl, an experimental C++ extension (See Appendix E,
Signatures), Sather (Eiffel-based), and an Eiffel superset [Jones 92] are all
examples of OO systems providing subtype polymorphism. Functional languages
such as ML, Russell, and Haskell provide a separation with pure parametric
polymorphism (as is also commonly found in OO languages in additon to inclusion
polymorphism).
2.8) What Are Generics And Templates?
--------------------------------------
Short Answer: Parametric Polymorphism (although various implementations
provide various subsets).
Generics (or Templates in C++) refer to the ability to parameterize types
and functions with types. This is useful for parameterized classes and
polymorphic functions as found in languages such as Ada, C++, Eiffel, and
etc., although these are "syntactic" or restricted forms [Cardelli 85].
Generics are orthogonal to inheritance, since types (and classes)
may be generically parameterized. Generics provide for reusability in
programming languages. An example is a Stack with a generically
parameterized base type. This allows a single Stack class to provide
many instantiations such as a Stack of ints, a Stack of any fundamental
or user defined type, or even a Stack of Stacks of ... Another example is
a polymorphic sort function taking a base type with a comparison operator.
The function can be called with any type (containing a comparison operator).
See [Booch 87b] for several examples in Ada and [Stroustrup xx] and [Murray
93] for examples in C++.
While generics have many advantages, typical limitations include a static
nature, which is an advantage for strong typechecking but a potential
disadvantage when causing dynamic compilation (leading to a time/space
efficiency tradeoff), and sources can cause inlining and create source code
dependencies and expand code size (unlike a single-body or "true"
parametrically polymorphic implementation. Generics can also be viewed as a
special case of type variables.
Functions are typically generic in statically-typed parametrically-polymorphic
languages. One such popular functional language is ML, in which all functions
are generic. Russell and Haskel are more modern variants (references are
forthcoming, however see APPENDIX E).
SECTION 3: GENERAL
===================
References: (many more are to come)
[Coplien 92] Covers C++, symbolic, exemplar (single-hierarchy), etc.
[Kim 89] Covers many OO systems.
3.1) What Is The "Classical" Object-Oriented Paradigm?
-------------------------------------------------------
This refers to the usual class and object model. Its any 2+ level system
as described in section 1.4. See also [Coplien 92].
3.2) What Is The "Delegation/Prototyping" Object-Oriented Paradigm?
--------------------------------------------------------------------
See [Kim 89, ch 1,3].
This is the 1 Level System as Described under Meta-Classes. Delegation refers
to the delegating of responsibility and can be applied to inheritance. When a
derived class does not have a desired attribute, it "delegates" responsibility
to one of its base classes. In delegation systems, each object has a delegate
list instead of a parent list. Thus, delegation's primary emphasis is
on message passing where an object could delegate responsibility of a message
it couldn't handle to objects that potentially could (its delegates). Any
object can be added to the delegate list, giving dynamic inheritance (of a
sort). Typically, delegation and prototyping languages also have "part
inheritance" in which fields and methods can be added and deleted from objects.
This makes for easy "prototyping", which allows for objects to be constructed
piece by piece at run-time, although the term "prototyping" in the context of
delegation languages usually refers to objects serving as prototypes for
object instantiation, or exemplars.
Next's NextStep OS provides delegation as an add-On to Objective-C, providing
an example of delegation in a class-based language [Garfinkel 93].
3.3) Are There Any Other Object-Oriented Paradigms?
----------------------------------------------------
There are many alternatives in OO. Emerald/Jade ([Black 86] and [Raj 89])
provides one, where inheritance is replaced with a roughly equivalent form
where reuse occurs at a finer degree of granularity - method and instance
variables - with subtype polymorphism making up the difference.
CLOS [Kim 89, ch 4] has a looser coupling of methods to classes and doesn't
distinguish a receiver, but packages can help make up the difference.
Object Specialization [Sciore 89] is an example of a hybrid approach between
delegation and classical systems, where parent classes have an extra level
of indirection and inheritance hierarchies are specified on a per object/class
basis.
3.4) What Are The Major Object-Oriented Programming Languages Today?
---------------------------------------------------------------------
Statically-Typed:
Add 1 To Cobol giving Cobol with Objects.
Beta
C++
Classic-Ada
Dragoon
Emerald/Jade
Object Pascal
Trellis/Owl
Dynamically-Typed:
Actors Languages
Flavors
Self
Smalltalk
Both:
Actor
Ada-9x
C++ (With RTTI)
Cecil
CLOS
Eiffel
Modula-3
Objective-C
Sather
3.5) What Are Object-Oriented Databases And Persistence?
---------------------------------------------------------
See also Appendices B and E and the comp.database.object newsgroup.
Refs to be included in future FAQs.
Object-Oriented Databases are databases that support objects and classes. They
are different from the more traditional relational databases because they allow
structured subobjects, each object has its own identity, or object-id (as
opposed to a purely value-oriented approach) and because of support for methods
and inheritance. It is also possible to provide relational operations on an
object-oriented database. OODBs allow all the benefits of object-orientation,
as well as the ability to have a strong equivalence with object-oriented
programs, an equivalence that would be lost if an alternative were chosen, as
with a purely relational database.
Another way of looking at Object-Oriented Databases is as a persistent object
store with a DBMS.
Persistence is often defined as objects (and their classes in the case of
OODBs) that outlive the programs that create them. Object lifetimes can be
viewed as a hierarchy, with locals/automatics having the shortest default
lifetime and objects stored indefinitely in an OODB (which are persistent)
having the longest. Persistent object stores do not support query or
interactive user interface facilities, as found in a fully supported OODBMS.
Appendix B also contains references for relational interfaces to OODBs.
3.6) What Are Object-Oriented Operating Systems?
-------------------------------------------------
Refs to be included in future FAQs. See also Appendix E.
Object-Oriented Operating Systems provide resources through objects, sometimes
all the way down to to the machine (OO architectures are found at the bottom).
They are almost always distributed systems (DOS or DPOS), allowing objects to
be passed freely between machines. They are typically capability-based since
objects, and hence system resources, can only be accessed if a capability to
them is available to programs.
Here are some abstracts taken from several postings to the net. This list is
by no means exhaustive.
Chorus Micro-kernel (written in C++)
Choices (research OS, University of Illinois, written in C++, supports SVR4)
GEOS (GeoWorks', written in Object Assembler, OO superset of 8086)
Mach (CMU, supports BSD 4.3, really message-based)
NachOS (written in C++, OS teaching/learning OS)
Ouverture Project (ESPRIT funded OMG IDL defines inter-module interfaces)
SOS
Spring (Sun, written in C++)
PenPoint OS (Go, written in C++)
From: whitney@oberon.Meakins.McGill.CA ()
Insight ETHOS: On Object-Orientation in Operating Systems
ISBN 3 72811948 2
This thesis covers the design of an extensible object-oriented
operating systems. The language used was Oberon-2. It includes
a generalization of the Rider/Carrier principle, Object Directories
as well as basic OS issues such as memory, file, tasking management.
It covers extensible objected-oriented programming from hardware up.
It reviews other designs such as Clouds and Choices which where written
It reviews other designs such as Clouds and Choices which where written
on C++. [[ The lack of type-tests in C++ was a problem in other designs.]]
ETHOS was implemented as an operating system for the Ceres computers
at the ETH.
3.7) What Are The Current Object-Oriented Methodologies?
---------------------------------------------------------
Here is a list of OOSE Methodologies:
Berard [Berard 93]
BON [Nerson 92]
Booch [Booch 94]
Coad/Yourdon [Coad 91]
Colbert [Colbert 89]
de Champeaux [de Champeaux 93]
Embley [Embley 92]
EVB [Jurik 92]
FUSION [Coleman 94]
HOOD [HOOD 89]
IBM [IBM 90,91]
Jacobson [Jacobson 92]
Martin/Odell [Martin 92]
Reenskaug (OOram, was OORASS) [Reenskaug 91]
ROOM [APPENDIX D, ObjecTime CASE Toolset]
Rumbaugh et al. [Rumbaugh 91]
Shlaer and Mellor [Shlaer 88 and 92]
Wasserman [Wasserman 90]
Winter Partners (OSMOSYS) [Winter Partners]
Wirfs-Brock et al. [Wirfs-Brock 90]
Further Ideas And Techniques:
Meyer [Meyer 88]
Stroustrup [Stroustrup 91]
See APPENDIX D for CASE systems supporting these methodologies (several from
the originators themselves).
See also section 1.21 for a discussion on OOA/OOD and etc.
Summaries and comparisons will be provided in future FAQs. Suggestions for
inclusion of other major or new methodologies should be sent to the FAQ author.
Here are some comparison studies posted to the net:
Arnold, P., Bodoff, S., Coleman, D., Gilchrist, H., Hayes, F., An Evolution of
Five Object Oriented Development Methods, Research report, HP Laboratories,
June 1991
de Champeaux, Dennis and Faure, Penelope. A comparative study of object-
oriented analysis methods. Journal of Object Oriented Programming (JOOP), pp
21-32. Vol.5, No. 1, 3/4-92
Fichman R.G. & Kemerer C.F. OO and Conventional Analysis and Design
Methodologies. Computer, Oct 1992, Vol 25, No. 10, p 22-40
Fichman, Robert and Kemerer, Chris. Object-Oriented and Conventional Analysis
and Design Methods - Comparison and Critique. IEEE-Comp, Oct, 1992, pp 22-39.
OOA, OOD, conventional analysis, conventional design, DeMarco SA, Yourdon SA,
Bailin OO requirements specification, Coad-Yourdon OOA, Shlaer-Mellor OOA,
Yourdon-Constantine SD, Martin information engineering design, Wasserman OOSD,
Booch OOD, Wirfs-Brock responsibility-driven design.
Hong, S., van den Goor, G., and Brinkkemper, S. A Comparison of Object-
oriented Analysis and Design Methods. Working paper, Computer Information
Systems Department, Georgia State University, Atlanta USA, 1992, 12 pages. To
appear in the Proceedings of the 26th Hawaiian international conference on
System Sciences, IEEE Computer Science Press.
Hong, S., van den Goor, G., Brinkkemper, S. A Formal Approach to the Comparison
of Object-Oriented Analysis and Design Methodologies, Hawaii International
Conference on System Sciences (HICSS) (IEEE Computer Society Press, Hawaii)
1993, Vol. IV, pp. 689-698. Summary of [van den Goor et.al., 1992] below.
Order procedure:
Available from the authors at cisssh@gsusgi2.gsu.edu or sjbr@cs.utwente.nl.
The authors, regretfully, cannot supply ftp, postscript, TEX, or
whatsoever.
Monarchi, David and Puhr, Gretchen I. A Research Typology for Object-Oriented
Analysis and Design. CACM/September 1992/Vol.35, No.9, pp35.
[Wilkie 93] summarizes, compares, and provides examples of Booch, Wirfs-Brock,
Hood, Coad and Yourdon, Winter Partners, Shlaer and Mellor, Jacobson,
Wasserman et al, Rumbaugh, Reenskaug et al, and Colbert.
Wirfs-Brock, R.J. and Johnson, R.E., "Surveying Current Research in Object-
Oriented Design," The Communications of ACM, (33, 9) Sept. 1990, pp. 104-1124.
UNICOM. Approaches to Object-Oriented Analysis and Design.
tel: l 44 895 256 484. Ask the TOC and have a look at it.
Also commercially available:
An Evaluation of Object-Oriented Analysis and Design Methodologies (9)
J. Cribbs, C Roe, S. Moon
SIGS Books
(212) 274-0640
$149.
Object-Oriented Methodology Comparison Study (10 methodologies)
Berard, Booch, Coad/Yourdon, Colbert, Embley, IBM, Martin/Odell, Rumbaugh,
Shlaer/Mellor, Wirfs-Brock. Also contains refs to several previous studies.
Berard Software Engineering
101 Lakeforest Blvd., Suite 360, Gaithersburg, MD 20877
Contact Person: Jim Youlio
Phone: 301-417-9884
Fax: 301-417-0021
email: info@bse.com
[van den Goor et.al., 1992] G. van den Goor, S. Hong and S. Brinkkemper,
A Comparison of Six Object-oriented Analysis and Design Methods. Report
Center of Telematics and Information Technology, University of Twente,
the Netherlands, and Computer Information Systems Department, Georgia
State University, Atlanta, USA, 1992, 163 pages, US$ 70.
This report gives an in-depth analysis of six generally accepted
O-O methods, that are available in textbooks. The background, steps,
concepts, notations, and specification techniques of the methods
are extensively compared.
The six methods are:
- Object Oriented Analysis & Object Oriented Design (OOA/OOD) of Coad &
Yourdon (1991)
- Designing Object Oriented Software (DOOS) of Wirfs-Brock et.al. (1990)
- Object Modelling Technique (OMT) of Rumbaugh et.al. (1991)
- Object Oriented Systems Analysis (OOSA) of Shlaer & Mellor (1988)
- Object Oriented Design with Applications (OODA) of Booch (1991)
- Object Oriented Analysis and Design (OOAD) of Martin & Odell (1992).
The comparison is performed by meta-modelling, resulting into detailed
information on the concepts of the methods (in EER notation) and on the
steps of the procedure of the methods (in Task Diagrams). Extensive
comparison tables of steps, concepts, techniques are included. Mappings of
the methodical concepts to the constructs of programming languages (C++,
Objective-C, Smalltalk-80, Object Pascal en CLOS) are given. A small
test case illustrates the application of the methods.
Order procedure:
Those who want to order the complete report (163 pp.) can order one by
specifying their postal address in an e-mail (sjbr@cs.utwente.nl) or fax
(+31.53.33.9605) attn. Sjaak Brinkkemper. The report will be send within
two weeks with an invoice for US$ 70. (seventy dollar; including shipping,
excl VAT).
3.8) What Is the OMG/OMA/ORB/CORBA?
------------------------------------
Contents:
(3.8.1) Contact Information
(3.8.2) OMG Summary
(3.8.3) Mail Server Access
(3.8.4) OMG Publications
- First Class (Bi-Monthly Newsletter)
- Object Management Architecture Guide (OMA)
- The Common Object Request Broker: Arch. and Spec. (Corba)
- Pricing
(3.8.5) Implementations (Brief)
(3.8.6) Implementation Descriptions
(3.8.7) Books, Articles, And Literature
3.8.1 Contact Information
__________________________
Contact Person: Richard Soley (technical director) soley@omg.com
FTP Sites:
omg.org:pub/*
omg.org:pub/NEC_DII/93-1-2.tar... *CORBA (DII) (corba.ps.Z)
omg.org:pub/OMG_IDL_CFE_1.2/bin* idl.SunOS4.x, idl.Solaris2.x
claude.ifi.unizh.ch:under pub/standards/spec CORBA Spec
Headquarters: Marketing Office:
492 Old Connecticut Path 3823 Birchwood Drive
Framingham, MA 01701 Boulder, CO 80304
Tel: 508-820-4300 Tel: 303-444-8129
Fax: 508-820-4303 Fax: 303-444-8172
3.8.2 OMG Summary
__________________
From: soley@emerald.omg.ORG (Richard Mark Soley)
Subject: OMG
In answer to your general question about the OMG, here's a brief overview.
Feel free to call, fax or email for more information.
-- Richard Soley
Vice President & Technical Director
Object Management Group, Inc.
and coincidentally, MIT '82, SM '85, PhD '89 (EECS)
The Object Management Group (OMG) is an international software industry
consortium with two primary aims:
(*) promotion of the object-oriented approach to software engineering
in general, and
(*) development of command models and a common interface for the development
and use of large-scale distributed applications (open distributed
processing) using object-oriented methodology.
In late 1990 the OMG published its Object Management Architecture
(OMA) Guide document. This document outlines a single terminology for
object-oriented languages, systems, databases and application
frameworks; an abstract framework for object-oriented systems; a set
of both technical and architectural goals; and an architecture
(reference model) for distributed applications using object-oriented
techniques. To fill out this reference model, four areas of
standardization have been identified:
1) the Object Request Broker, or key communications element, for
handling distribution of messages between application objects in
a highly interoperable manner;
2) the Object Model, or single design-portability abstract model for
communicating with OMG-conforming object-oriented systems;
3) the Object Services, which will provide the main functions for
realising basic object functionality using the Object Request Broker -
the logical modeling and physical storage of objects; and
4) the Common Facilities will comprise facilities which are useful in
many application domains and which will be made available through OMA
compliant class interfaces.
The OMG adoption cycle includes Requests for Information and
Proposals, requesting detailed technical and commercial availability
information from OMG members about existing products to fill
particular parts of the reference model architecture. After passage
by Technical and Business committees to review these responses, the
OMG Board of Directors makes a final determination for technology adoption.
Adopted specifications are available on a fee-free basis to members and
non-members alike.
In late 1991 OMG adopted its first interface technology, for the Object
Request Broker portion of the reference model. This technology, adopted
from a joint proposal (named "CORBA") of Hewlett-Packard, NCR Corp.,
HyperDesk Corp., Digital Equipment Corp., Sun Microsystems and Object
Design Inc. includes both static and dynamic interfaces to an inter-
application request handling software "bus."
Unlike other organizations, the OMG itself does not and will not
develop nor sell software of any kind. Instead, it selects and promulgates
software interfaces; products which offer these interfaces continue to be
developed and offered by commercial companies.
In order to serve OMG membership interested in other object-oriented systems
arenas besides the distributed system problem, the Group supports Special
Interest Groups for discussion of possible standards in other areas. These
groups at present are:
1) Object Oriented Databases;
2) OO Languages;
3) End-User Requirements;
4) Parallel Processing;
5) Analysis & Design Methodologies;
6) Smalltalk; and
7) Class Libraries.
Any company, university/research institution or individual, whether
end-user or vendor, can become a member of this body. Administrative
details are given at the end of this paper.
3.8.3 Mail Server Access
_________________________
Information via Mail Server:
Send the following commands in a letter to the mail server.
mail omg_server@omg.org
help (how to use file server)
index (return a list of all available files)
get <file> (get files returned by index)
log <info> (logs info on server)
address <e-mail address) (use this address instead of sender)
list <directory> [match] (index a directory, pattern 'match' files)
size <segment size> (max file size to send)
list mail
list docs
get docs/doclist.txt
get docs/91-12-1.ps CORBA spec [although it looks a little old]
Recommended (from the net):
mail omg_server@omg.org
Subject:
help
index
list
list mail
list docs
get docs/doclist.txt
3.8.4 OMG Publications
_______________________
Below is from omg.org:pub/CORBA
> First Class (Bi-Monthly Newsletter)
First Class is OMG's non-commercial bi-monthly 28-page
newsletter. First Class provides current information on Object
Technology developments, both technically and commercially. First
Class offers an open editorial forum on numerous Object
Technology topics and issues. This publication features
commentaries from software industry leaders, informative user
case histories, OT training information and the latest object-
oriented product announcements. All OMG activities and the
ongoing development of the Object Management Architecture are
regularly reported.
> Object Management Architecture Guide (OMA)
The members of the OMG have a shared goal of developing and using
integrated software systems. These systems should be built using
a methodology that supports modular production of software;
encourages reuse of code; allows useful integration across lines
of developers, operating systems and hardware; and enhance long-
range maintenance of that code. As an organization, OMG believes
that the object-oriented approach to software construction best
supports their goals. The OMA publication outlines the
groundwork for technology response to Request for Proposals (RFP)
and the adoption of specifications.
> The Common Object Request Broker: Arch. and Spec. (Corba)
The CORBA, as defined by the OMG's Object Request Broker (ORB),
provides the mechanisms by which objects transparently make
requests and receive responses. The ORB provides interoperability
between applications on different machines in heterogeneous
distributed environments and seamlessly interconnects multiple
object systems. The Common Object Request Broker Architecture and
Specification described in this published document is a self-
contained response to the Request for Proposals (RFP) issued by
the ORB Task Force of the OMG.
> Pricing
[Here's why you don't see the specifications posted on the net! These are
from the list of literature and periodicals listed in omg.org:pub/CORBA]
o I would like a one year subscription to First Class
______ for $40 U.S., ______ for $50 outside U.S.
o I would like to order ______ copy(s) of the Object Management
Architecture (OMA) Guide for $50 each.
o I would like to order ______ copy(s) of the CORBA for $50 each.
o [Combinations]
Contact documents@omg.org or omg_documents@omg.org for more of the same...
3.8.5 Implementations (Brief)
______________________________
> DEC ACA. Maynard, MA
Runs on AIX,VMS,ULTRIX,,MS-WINDOWS,MAC,HP-UX,UNIX, NT(planned).
> HP ORB Plus and HP Distributed Smalltalk
Full implementation of the OMG CORBA 1.1 Object Request Broker.
Also DOMF
Hewlett-Packard
Distributed Computing Group
19447 Pruneridge Avenue
Cupertino, CA 95014-9974 (USA)
Ian Fuller ian@cup.hp.com (408) 447-4722
> HyperDesk (Westborough MA) HD-DOMS, joe_cordo@hyperdesk.com
Runs on SPARC, HP/UX, IBM RS-6000, Data General Aviion, MS-Windows (client
API only), NetWare (planned, Novell owns part of HyperDesk).
> IBM SOM (System Object Model)
Available on AIX and OS/2. See Distributed Computing Monitor, March 93 for a
detailed review.
> IONA Technologies, Dublin Orbix, info@iona.ie
runs on (Unix (Solaris 1.1) (now), DOS, Windows, NT (planned)
> ROLSCH CONSULTING (RC-ORB)
implements ORB spec, DOS/Windows 3.1, 12 user license: $99.
Ref: Datamation, LOOK AHEAD Section, August 1. German Company.
> SuiteSoftware (Anaheim CA) SuiteDOME
runs on VAX/VMS, Unix, PC
> Sun DOE
> Tivoli
> CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch
The ELECTRA Toolkit (not finished)
3.8.6 Implementation Descriptions
___________________________________
The OMG also has a (Corporate) Membership list and "known CORBA supporters"
list with their info package.
> The ELECTRA Toolkit
CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch
The ELECTRA Toolkit
Subject: ORB Implementations
Date: Tue, 4 May 1993 13:12:36 +0200 (MET DST)
From: Silvano Maffeis <maffeis@ifi.unizh.ch>
something like an Object Broker, but it is *not* CORBA compatible (yet).
Electra is a research project and not available yet.
Its a toolkit for building failure resilient, distributed applications
in C++. It supports object-groups, virtual synchrony, multithreading
etc. Electra is based on the HORUS toolkit (which is "the new ISIS
implementation" developed at Cornell, Ithaca NY.)
An overview paper to electra is available from:
ftp.ifi.unizh.ch: pub/techreports/electra.ps.Z
> HD_DOMS
HD-DOMS (HyperDesk Distributed Object Management System). A
CORBA-compliant DOMS. Includes a GUI API driver for prototyping and
exercising objects, a bundled object database for persistent object
storage, a Kerberos-based authentication service, a location service, a
set of base classes to speed development, and a test script language.
Revision 1.0 has been shipping since beginning of '92. Revision 1.1
(which includes support for CORBA's static client interface) is available
now, and a NetWare version is in the works. Submitted a C++ language
mapping for IDL to the OMG recently.
HyperDesk Corporation
2000 West Park Drive
Westboro, MA 01581
(508)366-5050
> HP ORB Plus and HP Distributed Smalltalk
From: daryl@cup.hp.com (Daryl Odnert)
Subject: HP ORB Plus and Distributed SmallTalk
Summary: Official HP Press release on HP ORB Plus and DST 2.0
Date: Thu, 30 Sep 1993 20:13:48 GMT
Organization: Hewlett-Packard
============================================================================
SUBJECT: HP INTRODUCES DISTRIBUTED-COMPUTING SOLUTION FOR BUILDING
SCALABLE, OBJECT-ORIENTED APPLICATIONS
DATE: September 27, 1993
----------------------------------------------------------------------------
PALO ALTO, Calif.--(BUSINESS WIRE) via First! -- Hewlett-Packard Company
today introduced a distributed-computing solution for building scalable,
object-oriented applications.
With HP ORB Plus, programmers can develop scalable, object-based
applications that can be distributed throughout the enterprise. HP also
introduced an enhanced version of HP Distributed Smalltalk.
HP ORB Plus and HP Distributed Smalltalk are major components of HP's
overall distributed-computing strategy, which is designed to give customers
integrated, desktop access to enterprise-wide information and resources in
distributed heterogeneous systems environments. Of all computer companies,
HP believes it is best positioned to help customers take advantage of
distributed computing. HP provides a wide variety of distributed-computing
products, understands how to help customers adopt new technology for maximum
business benefit, and offers worldwide support and training programs,
ranging from analysis and design to deployment.
HP ORB PLUS: CORBA AND DCE COMBINED
HP ORB Plus is the only environment that combines the complete CORBA 1.1
specification from the Object Management Group with the DCE standard from
the Open Software Foundation(tm) as its transport mechanism. DCE is
designed to let developers write one application and then deploy it --
without modification -- on any other system that supports DCE. HP ORB Plus
reduces the complexity of developing distributed applications so programmers
can concentrate on the application itself without needing to know multiple
operating systems, networking protocols or where application objects are
stored.
The DCE (Distributed Computing Environment) standard provides an
integrated set of services that can be used separately or together to
provide a distributed computing environment that's easy to administer. The
CORBA (common-object-request-broker architecture) specification provides a
standard for how objects (in applications, repositories or class libraries)
make requests and receive responses across a distributed network.
HP ORB PLUS DETAILS
HP ORB Plus consists of several components: the Distributed Object
Management Facility (DOMF), object services, developers' and administrative
tools, and sample applications. HP's DOMF provides a location-transparent
object-communication mechanism across heterogeneous networks by using the
DCE standard. This object- enabling technology specification was jointly
developed with SunSoft. By following a common specification, HP and SunSoft
have made it easier for their customers to port applications between their
platforms.
In addition, HP is working with IBM to integrate HP's DOMF with IBM's
System Object Model with extensions for distribution. This integration will
eventually provide users with complete scalability, portability and
interoperability of distributed applications across HP and IBM platforms.
This is part of the companies' planned approach toward a standards-based,
"plug-and-play" object-oriented environment. This will give developers,
system administrators and end users language-neutral, enterprise-wide,
heterogeneous support for building, managing and using distributed object-
oriented applications.
"We're so convinced of the value of object technology that we're staking
our entire company on it," said Richard Tanler, president and chief
executive officer of Information Advantage, Inc. "Our object-based
applications for retailers provide the means to a competitive business edge.
We plan to use HP ORB Plus to develop new object-based products that
retailers can distribute to end users throughout headquarters, all chain
stores, and warehousing and distribution operations."
HP DISTRIBUTED SMALLTALK 2.0
In a related announcement, HP introduced Version 2.0 of HP Distributed
Smalltalk. This toolset works with VisualWorks from ParcPlace Systems to
provide programmers with a rapid development environment for creating and
running distributed applications. These applications can use object
databases (currently OpenODB from HP and Gemstone from Servio) as their
storage mechanism to facilitate the reuse of objects.
Applications built using HP Distributed Smalltalk currently run without
modification on HP, Sun and IBM UNIX(R) system-based workstations. They
also will run on Apple Macintosh computers and on any PC running the Windows
3.1 or Windows NT operating systems from Microsoft(R) Corp., once
VisualWorks 2.0 is released (expected within two months.)
New HP Distributed Smalltalk 2.0 features include the following:
-- easier deployment, with the ability to run multiple HP
Distributed Smalltalk-based applications on a single system;
-- up to 400 percent increased performance, through quicker
sending and receiving of remote messages, and reusable
object libraries;
-- run-time version, for full production deployment; and
-- easier development, with remote object browsing so
developers can find and use objects more quickly.
TECHNICAL DETAILS AND AVAILABILITY
HP's DOMF includes the object request broker, interface- definition-
language compiler, static and dynamic invocation interface and interface
repository. In addition to these OMG-specific features, most developers
writing distributed, object-oriented applications require additional
interfaces to use objects effectively. So developers don't need to create
their own, HP has supplied several object-service interfaces for developers
to use. That's why HP ORB Plus includes OMG interfaces and implementations
for properties, life cycle, associations, event notification and naming.
HP's limited release of HP ORB Plus to key developers is designed so that
customer input can be incorporated into the product early in its development
cycle. The initial version will work with the C++ programming language.
For the generally available Developer's Kit, C++, C and Smalltalk
interoperability is planned so objects written in different languages can be
combined into one application. The Developer's Kit is scheduled to be
available mid- 1994; prices will be announced then. HP ORB Plus runs on the
HP Apollo 9000 Series 700 workstations and HP 9000 Series 800 business
servers.
Hewlett-Packard Company is an international manufacturer of measurement
and computation products and systems recognized for excellence in quality
and support. The company's products and services are used in industry,
business, engineering, science, medicine and education in approximately 110
countries. HP has 94,900 employees and had revenue of $16.4 billion in its
1992 fiscal year.
EDITORIAL CONTACTS:
Hewlett-Packard Company
Lynne Hanson, 408/447-1415, Cupertino, Calif.
Jill Kramer, 408/447-4275, Cupertino, Calif.
==================
Daryl Odnert daryl@cup.hp.com
Distributed Computing Program
Hewlett-Packard Company
Cupertino, California
> Iris RDOM
From: rcbc@cs.cornell.edu (Robert Cooper)
Subject: Re: DCE vs. CORBA
Reply-To: rcbc@isis.com
Product: Isis Reliable Distributed Object Manager(tm) (RDOM)
Company: Isis Distributed Systems, Inc., Ithaca NY, USA.
Isis RDOM(tm) is a fault tolerant distributed ORB platform for reliable
multi-lingual object-oriented applications. RDOM provides an "object group"
paradigm for constructing complex applications out of collections of
cooperating objects. RDOM is built on top of the Isis Distributed
Toolkit(tm). RDOM provides interfaces from Smalltalk (Parcplace),
Objective-C, and C++, and runs on most Unix workstations. RDOM is currently
not CORBA compliant, but will be brought to compliance during 3Q93.
Status:
RDOM has been at beta test sites since January. General release of
the Smalltalk and Objective-C language interfaces is expected in June.
The C++ interface in August. Customers include AMD, Consilium and Swiss
Bank Corp).
> Orbix
Orbix
Iona Technologies Ltd.
O'Reilly Institute
Westland Row
Dublin 2
Ireland
"ORB, CORBA compliant.
Product launched June, 93 at the OMG Object World.
Now shipping. Provides C++ support (gives distributed
C++ programming using CORBA); C++-IDL binding was jointly submitted with
SunSoft/HP to OMG recent call. "
etc etc
Chris Horn, tel: +353-1-6790677
Iona Technologies, fax: +353-1-6798039
O'Reilly Institute, email: horn@iona.ie
Westland Row
IRL - Dublin 2
3.8.7 Books, Articles, And Literature
--------------------------------------
This section is expected to grow considerably in the future.
"Distributed Object Computing With CORBA", C++ Report, July/August 1993
The Object Database Standard: ODMG-93
edited by: R.G.G. Cattell
published by Morgan Kaufmann Publishers, San Mateo, California
[Covers CORBA standards with respect to OODBs]
3.9) Why Is Garbage Collection a Good Thing?
---------------------------------------------
From: Paul Johnson (paj@gec-mrc.co.uk)
Garbage collection (GC) is a facility in the run-time system associated with a
language which will automatically reclaim objects which are no longer used.
OO Languages which require garbage collection include Eiffel, Smalltalk and
CLOS. C and C++ can have garbage collection retrofitted (see [3] below).
[Ada has switchable GC, too -bob]
Without GC programmers must explicitly deallocate dynamic storage when
it is no longer needed (in C this is done by a call to free(3)).
There are a number of problems with this:
1: Bugs due to errors in storage deallocation are very hard to find,
although products are available which can help.
2: In some circumstances the decision about whether to deallocate
storage cannot be made by the programmer. Drawing editors and
interpreters often suffer from this. The usual result is that the
programmer has to write an application-specific garbage collector.
3: An object which is responsible for deallocating storage must be
certain that no other object still needs that storage. Thus many
modules must co-operate closely. This leads to a tight binding
between supposedly independent modules.
4: Libraries with different deallocation strategies are often
incompatible, hindering reuse.
5: In order to avoid problems 3 and 4, programmers may end up copying
and comparing whole objects rather than just references. This is a
particular problem with temporary values produced by C++ overloaded
operators.
6: Because keeping track of storage is extra work, programmers often
resort to statically allocated arrays. This in turn leads to
arbitrary restrictions on input data which can cause failure when
the assumptions behind the chosen limits no longer apply. For
instance many C compilers limit expression nesting, identifier
length, include file nesting and macro stack depth. This causes
problems for programs that generate C.
One partial solution to a lack of GC is reference counting. In this
scheme each object keeps a count of references to it. When this count
drops to zero the object is automatically deallocated. However this
is inefficient (swapping two references will result in three
decrements, three increments and six comparisons) and cannot reclaim
circular data structures. Two systems that use a reference count GC
are the Interviews C++ graphics library and the Unix file system (the
link count).
Opponents of GC reply that it introduces an overhead which is
unacceptable in some applications. However the overhead of manual
storage deallocation is probably as high as GC. GC algorithms are
also available with good real-time behaviour.
[Further, GC can perform compaction improving locality of reference.]
Further Reading:
[1] "Object-Oriented Software Construction" by Meyer puts the argument
for GC.
[2] "Uniprocessor Garbage Collection Techniques," by Paul R. Wilson,
in Memory Management (proceedings of 1992 Int'l Workshop on Memory
Management, Sept. 1992, St. Malo, France, Yves Bekkers and Jacques Cohen,
eds.), Springer Verlag Lecture Notes in Computer Science #637.
This is an excellent summary of the state of the art in GC algorithms. This
and other papers about garbage collection are available in PostScript via
anonymous ftp (cs.utexas.edu:pub/garbage/gcsurvey.ps. [See APPENDIX E]
[3] "Garbage Collection in an Uncooperative Environment" by Boehm and
Weiser. Software --- Practise and Experience vol 18(9), pp 807-820.
Sept 1988. This describes GC in C and C++.
3.10) What Can I Do To Teach OO To The Kids?
---------------------------------------------
Smalltalk (in its original 1972 version) was initially intended to make
computer programming easy enough for children. The idea was that manipulating
objects was something more intuitive and natural than coding procedures.
Other entries or suggestions are welcome, please send to the author of the FAQ.